﻿<?php
// *****************************************************
// 
// Справочник цветов
//
// *****************************************************

require_once( "tools.class.php" );
require_once( "tables.class.php" );
require_once( "datadefine.class.php" );

class ColorDictionary extends tables
{

    public function GetPage()
    {

        $data = new jqGridData();
        
        while(true) 
        {
            if( $this->db == NULL ) {
                $data->userdata->errcode = 1;
                $data->userdata->errmess = "Ошибка соединения с базой данных.";
                break;
            }
            $db = $this->db;
        
// Проверяем данные
            $page    = ( isset($_REQUEST["page"]) && $_REQUEST["page"] > 0 ) ? $_REQUEST["page"] : 1;
            $limit    = ( isset($_REQUEST["rows"]) && $_REQUEST["rows"] > 0 ) ? $_REQUEST["rows"] : 1;
            $sidx    = ( isset($_REQUEST["sidx"]) && $_REQUEST["sidx"] != '' ) ? $_REQUEST["sidx"] : 'color_id';
            $sord    = ( isset($_REQUEST["sord"]) && strtolower($_REQUEST["sord"]) == 'desc' ) ? 'DESC' : 'ASC';
            $search    = ( isset($_REQUEST["_search"]) && strtolower($_REQUEST["_search"]) == 'true') ? true : false;

// Фильтр
            $whc = array();
            if( $search )
            {
                if( isset($_REQUEST["color_id"]) && is_numeric($_REQUEST["color_id"]) ) {
			    	$whc[] = "color_id=" . $db->quote($_REQUEST["color_id"]);
			    }
                
                if(isset($_REQUEST["color_code"]) && is_numeric($_REQUEST["color_code"]) ) {
			    	$whc[] = "color_code=" . $db->quote($_REQUEST["color_code"]);
                }
			    
                if(isset($_REQUEST["color_name"]) && $_REQUEST["color_name"] != "") {
			    	$whc[] = "color_name LIKE " . $db->quote("%".$_REQUEST["color_name"]."%");
                }
            }       
            $whereclaus = (count($whc) != 0 ) ? " WHERE " . implode(" AND ", $whc) : "";
		    unset($whc);
            
// Получаем количество записей с учетом фильтра
            $recset = $db->query( "SELECT COUNT(*) AS count FROM colors" . $whereclaus );
		    $row = $recset->fetch(PDO::FETCH_ASSOC);
		    $count = $row['count'];
		    $recset->closeCursor();
            
// Пустая таблица
            if ($count == 0) break;

// Рассчитаем сколько всего страниц займут данные в БД
		    if( $count > 0 && $limit > 0) {
		    	$total_pages = ceil($count/$limit);
		    } else {
		    	$total_pages = 0;
		    }                  
 
		    if ($page > $total_pages) $page=$total_pages;                  
 
		    $start = $limit*$page - $limit;                   
		    if($start < 0) $start = 0;                  
 
// Формируем запрос
		    $sqlreq =   "SELECT * FROM colors ".$whereclaus." ORDER BY ".$sidx." ".$sord.
		                " LIMIT ".$start.", ".$limit;
            
		    $recset = $db->query($sqlreq);                  
            
// Формирование объекта для возврата
    	
    		$data->page      = $page;
    		$data->total     = $total_pages;
    		$data->records   = $count;
    		
// Строки данных для таблицы
    		$i = 0;
    		while($row = $recset->fetch(PDO::FETCH_ASSOC)) {
    			$data->rows[$i]['id'] = $row['color_id'];
    			$data->rows[$i]['cell'] = array(
    					$row['color_id'],
    					$row['color_code'],
    					$row['color_name']
    			);
    			$i++;
    		}
		    break;
        }
// Отдаем результат
		header("Content-type: text/script;charset=utf-8");
		echo json_encode($data);
		return;
    }

//
// Добавление в справочник нового цвета
//
    public function Insert()
    {
        $color_id	= isset($_REQUEST["id"]) ? $_REQUEST["id"] : '';
        $color_code	= isset($_REQUEST["color_code"]) ? $_REQUEST["color_code"] : '';
        $color_name	= isset($_REQUEST["color_name"]) ? $_REQUEST["color_name"] : '';
		
		$errmess = "";

        while(true)
        {
			if ($color_id != "_empty" || !is_numeric($color_code) || $color_name == "") {
				$errmess = "Нарушение формата данных";
				break;
			}

            if( $this->db == NULL ) {
                $errmess = "Ошибка соединения с базой данных.";
                break;
            }
            $db = $this->db;
        
           // Проверяем существование
            $sqlreq = "SELECT COUNT(*) AS count FROM colors WHERE color_code = ".$db->quote($color_code).
                        " OR color_name = ".$db->quote($color_name);
			$recset = $db->query( $sqlreq );
            $row = $recset->fetch(PDO::FETCH_ASSOC);
            $count = $row['count'];
            $recset->closeCursor();
            if ($count > 0) {
                $errmess = "В справочнике уже присутствует цвет с <br>".
                            "указанным кодом или названием.";
                break;
            }
            
            $sqlreq = "INSERT INTO colors (color_code, color_name) VALUES ( ".
                $db->quote($color_code).", ".$db->quote($color_name)." )";

			if( $db->exec($sqlreq) === false ){
                $errmess = "Ошибка добавления новой записи.";
				break;
			}
			
            break;
        }

        Tools::json_response( $errmess, $errmess ? 1 : 0 );			
        return;
    }

//
// Изменение в справочнике записи из цвета
//
    public function Update()
    {
        $color_id    = isset($_REQUEST["id"]) ? $_REQUEST["id"] : '';
        $color_code  = isset($_REQUEST["color_code"]) ? $_REQUEST["color_code"] : '';
        $color_name  = isset($_REQUEST["color_name"]) ? $_REQUEST["color_name"] : '';
		
		$errmess = "";

        while(true)
        {
			if (!is_numeric($color_id) || !is_numeric($color_code) || $color_name == "") {
				$errmess = "Нарушение формата данных";
				break;
			}

            if( $this->db == NULL ) {
                $errmess = "Ошибка соединения с базой данных.";
                break;
            }
            $db = $this->db;
        
            // Проверяем сеществование
            $sqlreq = "SELECT COUNT(*) AS count FROM colors WHERE ".
                    "( color_code = ".$db->quote($color_code)." OR color_name = ".$db->quote($color_name).
                    " ) AND color_id != " . $db->quote($color_id);

            $recset = $db->query( $sqlreq );
            $row = $recset->fetch(PDO::FETCH_ASSOC);
            $count = $row['count'];
            $recset->closeCursor();
            if ($count > 0) {
                $errmess = "В справочнике уже присутствует цвет с ".
                            "указанным кодом или названием.";
                break;
            }

            $sqlreq = "UPDATE colors SET ".
                "color_code=".$db->quote($color_code).",".
                "color_name=".$db->quote($color_name)." ". 
                "WHERE color_id=".$db->quote($color_id);

            if( $db->exec($sqlreq) === false ){
                $errmess = "Ошибка обновления записи.";
                break;
            }

            break;
        }

        Tools::json_response( $errmess, $errmess ? 1 : 0 );            
        return;
    }

    
    public function Delete()
    {
        $errmess = "";
        $color_ids = (isset($_REQUEST['id']) && $_REQUEST['id'] != '') ?
            explode(",", $_REQUEST["id"], 100) : array();

        while( true ) {
            if (!Tools::is_numeric_array( $color_ids )) {
                $errmess = "Ошибка удаления записи.";
                break;
            }

            $color_id_list = implode(',', $color_ids);
            
            if( $this->db == NULL ) {
                $errmess = "Ошибка соединения с базой данных.";
                break;
            }
            $db = $this->db;
            
            $sqlreq = "SELECT COUNT(*) AS count FROM cars WHERE color_id IN (".$color_id_list.")";
            $recset = $db->query( $sqlreq );
            $row = $recset->fetch(PDO::FETCH_ASSOC);
            $count = $row['count'];
            $recset->closeCursor();
            if ($count > 0) {
                $errmess = "Один или несколько цветов уже задействованы.<br>".
                            " Поэтому их удаление невозможно.";
                break;
            }

            $sqlreq = "DELETE FROM colors WHERE color_id IN (".$color_id_list.")";
            if( $db->exec($sqlreq) === false ){
                $errmess = "Ошибка удаления записи(сей).";
                break;
            }

            break;
        }

        Tools::json_response( $errmess, $errmess ? 1 : 0 );            
        return;
    }

    
    public function Find()
    {
        $errmess = "";
        $term = isset($_REQUEST["term"]) ? $_REQUEST["term"] : '';

        $data = array();

        while( true ) {
// Проверяем данные
            if ($term == "") {
                $errmess = "Нарушение формата данных";
                break;
            }

            if( $this->db == NULL ) {
                $errmess = "Ошибка соединения с базой данных.";
                break;
            }
            $db = $this->db;
                    
// Формируем запрос
            $sqlreq = "SELECT * FROM colors WHERE color_name LIKE ".$db->quote("%".$term."%").
                        " ORDER BY color_name";
            $recset = $db->query( $sqlreq );
            while( $row = $recset->fetch(PDO::FETCH_ASSOC) ) {
                $unit = new AutoCompleteItem();
                $unit->value = $row['color_id'];
                $unit->name = $row['color_name'];
                $data[] = $unit;
            }
            $recset->closeCursor();
            break;
        }

        Tools::json_response( $errmess, $errmess ? 1 : 0, $data );            
        return;
    }

    public function GetList() {}
    
} //End of class ColorDictionary
?>